First-order perturbation ========================= The state vector ----------------- .. math :: z_{t}\equiv\left[ \begin{array} [c]{ccc}% x_{t-1}^{\prime} & \sigma & \varepsilon_{t}^{\prime}% \end{array} \right] ^{\prime} where :math:`\sigma` is the perturbation parameter. In some applications, we can assume agents have information on shocks :math:`k\geq 0` periods ahead into the future. In that case, the state variables under anticipated shocks (see e.g. :cite:`Maih2010` and :cite:`JuillardMaih2010`) is .. math :: z_{t}\equiv\left[ \begin{array} [c]{cccccc}% x_{t-1}^{\prime} & \sigma & \varepsilon_{t}^{\prime} & \color{red}{\varepsilon _{t+1}^{\prime}} & \color{red}{\cdots} & \color{red}{\varepsilon_{t+k}^{\prime}}% \end{array} \right] ^{\prime} Solvers for the quadratic matrix polynomial ---------------------------------------------- The constant-parameter case (and the Maih-Waggoner perturbation) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The algorithms implemented in RISE for solving linear rational expectations models are - *rise_1* : A Klein-like algorithm (Default). - *sims* : This is the Gensys algorithm by :cite:`Sims2002` - *Klein* : An algorithm by :cite:`Klein2000` - *AIM* : See e.g. :cite:`Anderson2008` - *cyclic_reduction* : the cyclic reduction algorithm .. note:: If there is a unique and stable solution in the Maih-Waggoner perturbation, these algorithms will also work in the regime-switching case. The regime-switching case ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The algorithms implemented in RISE for solving regime-switching linear rational expectations models are - *mnk* : Newton algorithm by :cite:`Maih2015`, which explicitly forms and store kronecker products. - *mn* : Newton algorithm by :cite:`Maih2015`, which avoids the creation of kronecker products and is thereby more efficient for solving large systems. - *fwz* : Newton algorithm by :cite:`FarmerEtAl2011` - *dsge_udc* : Undetermined coefficients method by :cite:`MaihWaggoner2018`. This algorithm can only be applied with the Maih-Waggoner perturbation. - *dsge_schur* : Schur-based method by :cite:`MaihWaggoner2018`. This algorithm returns the most stable solution. Therefore it gives the same answer as *rise_1* (and other constant-parameter solvers) when there is a unique stable solution. This algorithm can only be applied with the Maih-Waggoner perturbation. - *dsge_groebner* : Groebner-basis based solver from Computational algebraic geometry by :cite:`MaihWaggoner2018`. When it works, this algorithm finds all possible solutions to the problem. - *mfi* : Functional iteration algorithm by :cite:`Maih2015` .. note:: All these algorithms for solving regime-switching linear rational expectations can solve constant-parameter models even when there is no unique and stable solution. User-defined solver ~~~~~~~~~~~~~~~~~~~~~~~~~ A user-defined solver should be a function with inputs and outputs as follows :: [Tz_pb,Tsig,Te,retcode]=user_solver(Gplus01,A0,Aminus,B,Q,stst_,vargs{:}); where the inputs are : - *Gplus01* is an :math:`nd\times nd\times h\times h` array of coefficient matrices on forward-looking terms multiplied by the transition probabilities - *A0* is an :math:`nd\times nd\times h` array of coefficient matrices on contemporaneous terms - *Aminus* is an :math:`nd\times nd\times h` array of coefficient matrices on backward-looking terms - *B* is an :math:`nd\times nx\times h` array of coefficient matrices on shock terms - *Q* is an :math:`h\times h` transition matrix with Qij the probability of going from i to j - *stst_* is an :math:`nd\times h` matrix whose columns represent the steady state in each regime - *vargs* represents potential additional arguments entering the user-defined function. And the outputs are: - *Tz_pb* is an :math:`nd\times nd\times h` array of the impact of autoregressive terms - *Tsig* is an :math:`nd\times nd` matrix whose columns represent the impact of the perturbation parameter in each regime - *Te* is an :math:`nd\times nx\times h` array representing the impact of shock terms - *retcode* is a flag which takes on value 0 if there is no problem or a number different from 0 if there is a problem finding the solution.